home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / RestrTView.C < prev    next >
C/C++ Source or Header  |  1990-12-04  |  2KB  |  89 lines

  1. //$RestrTextView$
  2.  
  3. #include "RestrTView.h"
  4. #include "RegularExp.h"
  5. #include "BlankWin.h"
  6.  
  7. MetaImpl(RestrTextView, (TP(rex), 0));
  8.  
  9. RestrTextView::RestrTextView(EvtHandler *eh, RegularExp *rx, Rectangle r, Text *t,
  10.         eTextJust m, eSpacing sp, bool w, TextViewFlags fl, Point b, int id)
  11.                     : TextView(eh, r, t, m, sp, w, fl, b, id) 
  12. {
  13.     rex= rx;
  14. }
  15.    
  16. bool RestrTextView::Match(class Text* t, RegularExp *rex)
  17. {
  18.     int n, size= t->Size();
  19.     if (size == 0)  { // zero length text matches all patterns
  20.     delete t;
  21.     return TRUE;
  22.     }
  23.     int pos= t->Search(rex, &n, 0, size);
  24.     delete t;
  25.     return (pos == 0 && n == size);
  26. }
  27.  
  28. void RestrTextView::NotAccepted ()
  29. {
  30.     gWindow->Bell(20);
  31. }
  32.  
  33. void RestrTextView::SetRegExp(RegularExp* r)
  34. {
  35.     rex= r;
  36. }
  37.  
  38. void RestrTextView::Cut() 
  39. {
  40.     int from, to;
  41.     
  42.     GetSelection(&from, &to);
  43.     Text *tmp= CopyText();
  44.     tmp->Cut(from,to);
  45.     if (!Match(tmp,rex)) 
  46.     NotAccepted();
  47.     else
  48.     TextView::Cut();
  49. }          
  50.  
  51. void RestrTextView::Paste(Text *insert)
  52. {
  53.     int from, to;
  54.     
  55.     GetSelection(&from, &to);
  56.     Text *tmp= CopyText();
  57.     tmp->Paste(insert, from, to);
  58.     if (!Match(tmp, rex)) 
  59.     NotAccepted();
  60.     else
  61.     TextView::Paste(insert);
  62. }
  63.  
  64. Text *RestrTextView::CopyText() 
  65. {
  66.     Text *ct= 0, *t= GetText();
  67.     
  68.     if (t) {
  69.     t->RemoveObserver(this);
  70.     ct= (Text*) t->DeepClone();
  71.     t->AddObserver(this);
  72.     }
  73.     return ct;   
  74. }
  75.  
  76. ostream& RestrTextView::PrintOn(ostream &s)
  77. {
  78.     TextView::PrintOn(s);
  79.     return s << rex SP;
  80. }
  81.  
  82. istream& RestrTextView::ReadFrom(istream &s)
  83. {
  84.     TextView::ReadFrom(s);
  85.     s >> rex;
  86.     return s;
  87. }
  88.  
  89.